package seTOee.proxy.Demo;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/*
* 中介代理
* */
public class ProxyUtil {
    // 创建代理
    public static MyService createProxy(Person p) {
        //参数：
        // 1、类加载器-》生成代理类
        // 2、代理对象实现的接口，
        // 3、处理代理对象方法调用的代理对象
        MyService proxy =(MyService) Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),//类加载器
                p.getClass().getInterfaces(),//拿到代理对象实现的接口
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //参数一：代理对象接收到本身
                        //参数二：被代理的方法
                        //参数三：被代理的方法的参数
                        String methodName = method.getName();
                        if ("sing".equals(methodName)) {
                            System.out.println("准备话筒");
                        } else if ("dance".equals(methodName)) {
                            System.out.println("准备播放音乐");
                        }
                        return method.invoke(p, args);

                    }
                }//代理对象要干的事情
        );
        return proxy;
    }
}
